package com.studyweb.service;

import com.studyweb.pojo.entity.Achievement;

import java.util.List;

/**
 * 成就服务接口
 * 
 * @author StudyWeb Team
 * @since 1.0.0
 */
public interface AchievementService {
    
    /**
     * 根据ID查询成就
     * 
     * @param achievementId 成就ID
     * @return 成就信息
     */
    Achievement getById(Long achievementId);
    
    /**
     * 查询所有成就
     * 
     * @return 成就列表
     */
    List<Achievement> listAll();
    
    /**
     * 根据类别查询成就
     * 
     * @param category 成就类别
     * @return 成就列表
     */
    List<Achievement> listByCategory(String category);
    
    /**
     * 根据条件类型查询成就
     * 
     * @param conditionType 条件类型
     * @return 成就列表
     */
    List<Achievement> listByConditionType(String conditionType);
    
    /**
     * 根据条件类型和条件值查询成就
     * 
     * @param conditionType 条件类型
     * @param conditionValue 条件值
     * @return 成就列表
     */
    List<Achievement> listByCondition(String conditionType, Integer conditionValue);
    
    /**
     * 添加成就
     * 
     * @param achievement 成就信息
     * @return 成就ID
     */
    Long add(Achievement achievement);
    
    /**
     * 更新成就
     * 
     * @param achievement 成就信息
     * @return 是否成功
     */
    boolean update(Achievement achievement);
    
    /**
     * 删除成就
     * 
     * @param achievementId 成就ID
     * @return 是否成功
     */
    boolean delete(Long achievementId);
    
    /**
     * 根据名称模糊查询成就
     * 
     * @param name 成就名称
     * @return 成就列表
     */
    List<Achievement> listByName(String name);
    
    /**
     * 分页查询成就
     * 
     * @param page 页码
     * @param size 每页大小
     * @param name 成就名称（可选）
     * @param category 成就类别（可选）
     * @return 成就列表
     */
    List<Achievement> listByPage(int page, int size, String name, String category);
    
    /**
     * 查询成就总数
     * 
     * @param name 成就名称（可选）
     * @param category 成就类别（可选）
     * @return 成就总数
     */
    int count(String name, String category);
}